package com.ruoyi.system.service.impl;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

import com.ruoyi.system.domain.*;
import com.ruoyi.system.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.system.service.IJyjcSharingExpensesService;

/**
 * 费用分摊Service业务层处理
 * 
 * @author 石亚兵
 * @date 2025-07-09
 */
@Service
public class JyjcSharingExpensesServiceImpl implements IJyjcSharingExpensesService 
{
    @Autowired
    private JyjcSharingExpensesMapper jyjcSharingExpensesMapper;
    @Autowired
    private ExpensesDemoMapper expensesDemoMapper;
    @Autowired
    private JyjcShDatasMapper jyjcShDatasMapper;

    @Autowired
    private JyjcShMapper yjcShMapper;

    @Autowired
    private JyjcShUserMapper jyjcShUserMapper;
    /**
     * 查询费用分摊
     * 
     * @param id 费用分摊主键
     * @return 费用分摊
     */
    @Override
    public JyjcSharingExpenses selectJyjcSharingExpensesById(Long id)
    {
        return jyjcSharingExpensesMapper.selectJyjcSharingExpensesById(id);
    }

    /**
     * 查询费用分摊列表
     * 
     * @param jyjcSharingExpenses 费用分摊
     * @return 费用分摊
     */
    @Override
    public List<JyjcSharingExpenses> selectJyjcSharingExpensesList(JyjcSharingExpenses jyjcSharingExpenses)
    {
        return jyjcSharingExpensesMapper.selectJyjcSharingExpensesList(jyjcSharingExpenses);
    }

    /**
     * 新增费用分摊
     * 
     * @param jyjcSharingExpenses 费用分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int insertJyjcSharingExpenses(JyjcSharingExpenses jyjcSharingExpenses)
    {
        int rows = jyjcSharingExpensesMapper.insertJyjcSharingExpenses(jyjcSharingExpenses);
        insertJyjcSharingExpensesData(jyjcSharingExpenses);
        return rows;
    }

    /**
     * 修改费用分摊
     * 
     * @param jyjcSharingExpenses 费用分摊
     * @return 结果
     */
    @Transactional
    @Override
    public int updateJyjcSharingExpenses(JyjcSharingExpenses jyjcSharingExpenses)
    {
        jyjcSharingExpensesMapper.deleteJyjcSharingExpensesDataBySeId(jyjcSharingExpenses.getId());
        insertJyjcSharingExpensesData(jyjcSharingExpenses);
        return jyjcSharingExpensesMapper.updateJyjcSharingExpenses(jyjcSharingExpenses);
    }

    /**
     * 批量删除费用分摊
     * 
     * @param ids 需要删除的费用分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteJyjcSharingExpensesByIds(Long[] ids)
    {
        jyjcSharingExpensesMapper.deleteJyjcSharingExpensesDataBySeIds(ids);
        return jyjcSharingExpensesMapper.deleteJyjcSharingExpensesByIds(ids);
    }

    /**
     * 删除费用分摊信息
     * 
     * @param id 费用分摊主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteJyjcSharingExpensesById(Long id)
    {
        jyjcSharingExpensesMapper.deleteJyjcSharingExpensesDataBySeId(id);
        return jyjcSharingExpensesMapper.deleteJyjcSharingExpensesById(id);
    }

    /**
     * 生成费用分摊信息
     *
     * @param jyjcSharingExpenses
     * @return
     */
    @Override
    public int generateData(JyjcSharingExpenses jyjcSharingExpenses)
    {
        LocalDate date = LocalDate.parse(jyjcSharingExpenses.getFtdate() );
        String year = String.valueOf(date.getYear());
        String month = String.format("%02d", date.getMonthValue());
        JyjcSharingExpenses data=new JyjcSharingExpenses();
        data.setDeptcode(jyjcSharingExpenses.getDeptcode());
        List<JyjcSharingExpenses> jyjcSharingExpensesListbatch= new ArrayList<>();
        List<JyjcSharingExpensesData> JyjcSharingExpensesDatalistbatch = new ArrayList<JyjcSharingExpensesData>();
        List<JyjcSharingExpenses> jyjcSharingExpensesList=jyjcSharingExpensesMapper.generateData(data);
        List<JyjcSharingExpensesData> jyjcSharingExpensesDataList=jyjcSharingExpensesMapper.generateDataList(1L);
        for(JyjcSharingExpenses jyjcSharingExpenses1 : jyjcSharingExpensesList){
             Long id=Long.valueOf(jyjcSharingExpenses.getFtdate().replace("-", "")+jyjcSharingExpenses.getDeptcode()+jyjcSharingExpenses1.getId());
             jyjcSharingExpenses1.setYear(year);
             jyjcSharingExpenses1.setYf(month);
             jyjcSharingExpenses1.setFtdate(jyjcSharingExpenses.getFtdate());
             jyjcSharingExpenses1.setId(id);

             jyjcSharingExpenses1.setJyjcSharingExpensesDataList(jyjcSharingExpensesDataList);

             for( JyjcSharingExpensesData jyjcSharingExpensesData:jyjcSharingExpenses1.getJyjcSharingExpensesDataList()){
                jyjcSharingExpensesData.setSeId(id);
                JyjcSharingExpensesDatalistbatch.add(jyjcSharingExpensesData);
            }
             jyjcSharingExpensesListbatch.add(jyjcSharingExpenses1);

         }
        if (jyjcSharingExpensesListbatch.size() > 0)
        {
            jyjcSharingExpensesMapper.batchJyjcSharingExpenses(jyjcSharingExpensesListbatch);
        }
        if (JyjcSharingExpensesDatalistbatch.size() > 0)
        {
            jyjcSharingExpensesMapper.batchJyjcSharingExpensesData(JyjcSharingExpensesDatalistbatch);
        }
        insertSh(jyjcSharingExpenses,"add");
        return 1;
    }

    @Override
    public int UpdateFlag(JyjcSharingExpenses jyjcSharingExpenses)
    {
        if(StringUtils.isNotEmpty(jyjcSharingExpenses.getFtdate())){
            insertSh(jyjcSharingExpenses,"update");
        }else{
            insertDeptSh(jyjcSharingExpenses);
            jyjcSharingExpenses.setZmoney("1");
        }

        return jyjcSharingExpensesMapper.UpdateFlag(jyjcSharingExpenses);
    }

    /**
     * 报表审核
     *
     * @param jyjcSharingExpenses
     * @return
     */
    @Override
    public int UpdateFlagStatistics(JyjcSharingExpenses jyjcSharingExpenses)
    {
          insertStatisticsSh(jyjcSharingExpenses);
        if(jyjcSharingExpenses.getFlag().equals("0")&& jyjcSharingExpenses.getEconomicKm().equals("王文芳")){
            jyjcSharingExpenses.setFlag("1");
            jyjcSharingExpenses.setZmoney("2");
            return jyjcSharingExpensesMapper.UpdateFlag(jyjcSharingExpenses);
        }else if(jyjcSharingExpenses.getFlag().equals("3")){
            return jyjcSharingExpensesMapper.allsumlistTBjyjcallsumlis(jyjcSharingExpenses);
        }else{
            return 1;
        }

    }

    /**
     * 新增分摊费用子信息
     * 
     * @param jyjcSharingExpenses 费用分摊对象
     */
    public void insertJyjcSharingExpensesData(JyjcSharingExpenses jyjcSharingExpenses)
    {
        List<JyjcSharingExpensesData> jyjcSharingExpensesDataList = jyjcSharingExpenses.getJyjcSharingExpensesDataList();
        Long id = jyjcSharingExpenses.getId();
        if (StringUtils.isNotNull(jyjcSharingExpensesDataList))
        {
            List<JyjcSharingExpensesData> list = new ArrayList<JyjcSharingExpensesData>();
            for (JyjcSharingExpensesData jyjcSharingExpensesData : jyjcSharingExpensesDataList)
            {
                jyjcSharingExpensesData.setSeId(id);
                list.add(jyjcSharingExpensesData);
            }
            if (list.size() > 0)
            {
                jyjcSharingExpensesMapper.batchJyjcSharingExpensesData(list);
            }
        }
    }

    public void insertSh(JyjcSharingExpenses jyjcSharingExpenses,String action){

        JyjcShUser jyjcShUser=new JyjcShUser();
        jyjcShUser.setDeptcode(jyjcSharingExpenses.getDeptcode());
        jyjcShUser.setShType("1");
        JyjcShUser  jyjcShUser1=jyjcShUserMapper.selectJyjcShUser(jyjcShUser);
        String ny="";
            LocalDate date = LocalDate.parse(jyjcSharingExpenses.getFtdate() );
            String year = String.valueOf(date.getYear());
            String month = String.format("%02d", date.getMonthValue());
           ny=year+"-"+month;

        String flagResult="";
        if(action.equals("add")){
            JyjcSh jyjcSh=new JyjcSh();
            jyjcSh.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcSh.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcSh.setYearyf(ny);
            jyjcSh.setType("fyft");
            jyjcSh.setFlag("0");
            jyjcSh.setCreateBy(jyjcShUser1.getUsername());
            yjcShMapper.insertJyjcSh(jyjcSh);
            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH("0");
            jyjcShDatas.setShQ("0");
            jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDatas.setShId(jyjcSh.getId());
            jyjcShDatas.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcShDatas.setYearyf(ny);
            jyjcShDatas.setShName("生成");
            jyjcShDatas.setCreateBy(jyjcShUser1.getUsername());
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);
        }else if(action.equals("update")){
            JyjcSh jyjcSh=new JyjcSh();
            jyjcSh.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcSh.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcSh.setYearyf(ny);
            jyjcSh.setType("fyft");
           JyjcSh jyjcSh1=yjcShMapper.selectJyjcSh(jyjcSh);
            flagResult=jyjcSh1.getFlag();
            jyjcSh1.setFlag(jyjcSharingExpenses.getFlag());
            jyjcSh1.setCreateBy(jyjcShUser1.getUsername());
            yjcShMapper.updateJyjcSh(jyjcSh1);

            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
            jyjcShDatas.setShQ(flagResult);
            jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDatas.setShId(jyjcSh1.getId());
            jyjcShDatas.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcShDatas.setYearyf(ny);

          jyjcShDatas.setShName(jyjcSharingExpenses.getExpenseType());

            jyjcShDatas.setCreateBy(jyjcShUser1.getUsername());
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);

        }
    }
    public void insertDeptSh(JyjcSharingExpenses jyjcSharingExpenses){
        JyjcShUser jyjcShUser=new JyjcShUser();
        jyjcShUser.setDeptcode(jyjcSharingExpenses.getDeptcode());
        jyjcShUser.setShType("2");
        JyjcShUser  jyjcShUser1=jyjcShUserMapper.selectJyjcShUser(jyjcShUser);
        String ny=jyjcSharingExpenses.getYear()+"-"+jyjcSharingExpenses.getYf();
        String shName=jyjcSharingExpenses.getExpenseType();
        String username=jyjcShUser1.getUsername();

        String flagResult="";
        JyjcSh jyjcSh1=new JyjcSh();
        jyjcSh1.setDeptcode(jyjcSharingExpenses.getDeptcode());
        jyjcSh1.setYearyf(ny);
        jyjcSh1.setType("dept");
        JyjcSh jyjcShresult=yjcShMapper.selectJyjcSh(jyjcSh1);
         if(StringUtils.isNull(jyjcShresult)){
            JyjcSh jyjcSh=new JyjcSh();
            jyjcSh.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcSh.setYearyf(ny);
            jyjcSh.setType("dept");
            jyjcSh.setFlag(jyjcSharingExpenses.getFlag());
            jyjcSh.setCreateBy(username);
             yjcShMapper.insertJyjcSh(jyjcSh);
            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
            jyjcShDatas.setShQ("");
            jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDatas.setShId(jyjcSh.getId());
            jyjcShDatas.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcShDatas.setYearyf(ny);
            jyjcShDatas.setShName(shName);
            jyjcShDatas.setCreateBy(username);
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);

        }else{
            flagResult=jyjcShresult.getFlag();
            jyjcShresult.setFlag(jyjcSharingExpenses.getFlag());
            jyjcShresult.setCreateBy(username);
            yjcShMapper.updateJyjcSh(jyjcShresult);
            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
            jyjcShDatas.setShQ(flagResult);
            jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDatas.setShId(jyjcShresult.getId());
            jyjcShDatas.setYearyf(ny);
            jyjcShDatas.setShName(shName);
            jyjcShDatas.setCreateBy(username);
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);

        }
        JyjcSh jyjcShUpdate=new JyjcSh();
        jyjcShUpdate.setDeptcode(jyjcSharingExpenses.getDeptcode());
        jyjcShUpdate.setYearyf(ny);
        jyjcShUpdate.setType("fyft");
        jyjcShUpdate.setFlag("1");
    List<JyjcSh>  jyjcShList=yjcShMapper.selectJyjcShList(jyjcShUpdate);
    for(JyjcSh jyjcSh:jyjcShList){
        flagResult=jyjcSh.getFlag();
        jyjcSh.setFlag(jyjcSharingExpenses.getFlag());
        jyjcSh.setCreateBy(username);
        yjcShMapper.updateJyjcSh(jyjcSh);
        JyjcShDatas jyjcShDatas=new JyjcShDatas();
        jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
        jyjcShDatas.setShQ(flagResult);
        jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
        jyjcShDatas.setShId(jyjcSh.getId());
        jyjcShDatas.setShName(shName);
        jyjcShDatas.setYearyf(ny);
        jyjcShDatas.setShtime(jyjcSh.getShtime());
        jyjcShDatas.setCreateBy(username);
        jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);
    }

    }

    public void insertStatisticsSh(JyjcSharingExpenses jyjcSharingExpenses){
        String ny=jyjcSharingExpenses.getYear()+"-"+jyjcSharingExpenses.getYf();
        String shName=jyjcSharingExpenses.getExpenseType();
        String username=jyjcSharingExpenses.getEconomicKm();

        String flagResult="";
        JyjcSh jyjcSh1=new JyjcSh();
        jyjcSh1.setYearyf(ny);
        jyjcSh1.setType("statistics");
        JyjcSh jyjcShresult=yjcShMapper.selectJyjcSh(jyjcSh1);
        if(StringUtils.isNull(jyjcShresult)){
            JyjcSh jyjcSh=new JyjcSh();
          //  jyjcSh.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcSh.setYearyf(ny);
            jyjcSh.setType("statistics");
            jyjcSh.setFlag(jyjcSharingExpenses.getFlag());
            jyjcSh.setCreateBy(username);
            yjcShMapper.insertJyjcSh(jyjcSh);
            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
            jyjcShDatas.setShQ("");
            jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDatas.setShId(jyjcSh.getId());
            jyjcShDatas.setShtime(jyjcSharingExpenses.getFtdate());
            jyjcShDatas.setYearyf(ny);
            jyjcShDatas.setShName(shName);
            jyjcShDatas.setCreateBy(username);
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);

        }else{
            flagResult=jyjcShresult.getFlag();
            jyjcShresult.setFlag(jyjcSharingExpenses.getFlag());
            jyjcShresult.setCreateBy(username);
            yjcShMapper.updateJyjcSh(jyjcShresult);
            JyjcShDatas jyjcShDatas=new JyjcShDatas();
            jyjcShDatas.setShH(jyjcSharingExpenses.getFlag());
            jyjcShDatas.setShQ(flagResult);
            jyjcShDatas.setShId(jyjcShresult.getId());
            jyjcShDatas.setYearyf(ny);
            jyjcShDatas.setShName(shName);
            jyjcShDatas.setCreateBy(username);
            jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);

        }
        if("0".equals(jyjcSharingExpenses.getFlag()) && username.equals("王文芳")){

            JyjcSh jyjcShDeptUpdate=new JyjcSh();
            jyjcShDeptUpdate.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShDeptUpdate.setYearyf(ny);
            jyjcShDeptUpdate.setType("dept");
            jyjcShDeptUpdate.setFlag("2");
            List<JyjcSh>  jyjcShDeptList=yjcShMapper.selectJyjcShList(jyjcShDeptUpdate);
            for(JyjcSh jyjcSh:jyjcShDeptList){
                flagResult=jyjcSh.getFlag();
                jyjcSh.setFlag(jyjcSharingExpenses.getFlag());
                jyjcSh.setCreateBy(username);
                yjcShMapper.updateJyjcSh(jyjcSh);
            }

            JyjcSh jyjcShUpdate=new JyjcSh();
            jyjcShUpdate.setDeptcode(jyjcSharingExpenses.getDeptcode());
            jyjcShUpdate.setYearyf(ny);
            jyjcShUpdate.setType("fyft");
            jyjcShUpdate.setFlag("2");
            List<JyjcSh>  jyjcShList=yjcShMapper.selectJyjcShList(jyjcShUpdate);
            for(JyjcSh jyjcSh:jyjcShList){
                flagResult=jyjcSh.getFlag();
                jyjcSh.setFlag("1");
                jyjcSh.setCreateBy(username);
                yjcShMapper.updateJyjcSh(jyjcSh);
                JyjcShDatas jyjcShDatas=new JyjcShDatas();
                jyjcShDatas.setShH("1");
                jyjcShDatas.setShQ(flagResult);
                jyjcShDatas.setDeptcode(jyjcSharingExpenses.getDeptcode());
                jyjcShDatas.setShId(jyjcSh.getId());
                jyjcShDatas.setShName(shName);
                jyjcShDatas.setYearyf(ny);
                jyjcShDatas.setShtime(jyjcSh.getShtime());
                jyjcShDatas.setCreateBy(username);
                jyjcShDatasMapper.insertJyjcShDatas(jyjcShDatas);
            }

        }


    }
}
